
package com.lfl.client;

import com.lfl.annotation.Component;

import java.io.File;
import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

//检查并修改
//现在给你一个包的名字bean,但不知道里面有多少个类
//部分类上面有@Component（）这个注解，如果有注解的类
//要创建对象存储到Map集合中，key存储类，value存储对象。
public class WorkTest {
    public static void main(String[] args) {
        Map<String, Object> beanMap = new HashMap<>();

        //1.获取包名
        String packageName = "com.lfl.bean";

        //2.获取包下的所有类
        String packagePath = packageName.replace(".", "/");
        URL url = ClassLoader.getSystemClassLoader().getResource(packagePath);
        String path = url.getPath();

        //获取绝对路径下的所有文件
        File file = new File(path);
        File[] files = file.listFiles();
        Arrays.stream(files).forEach(f -> {
            try {
                //3.判断类上是否有注解
                String className = f.getName().split("\\.")[0];
                Class<?> clazz = Class.forName(packageName + "." + className);
                if (clazz.isAnnotationPresent(Component.class)) {
                    //4.如果有注解，创建对象存储到Map集合中
                    Component annotation = clazz.getAnnotation(Component.class);
                    String value = annotation.value();

                    //创建对象
                    Object obj = clazz.newInstance();
                    beanMap.put(value, obj);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });

        System.out.println(beanMap);
    }
}
